#ifndef DManSta_H_
#define DManSta_H_
#include "../../SAMA_Function.h"

//< 手自动状态枚举
enum DMS_AM_Sta
{
	DMS_MAN,
	DMS_AUTO
};

//< 工作方式枚举
enum DMS_Work_Mode
{
	DMS_Pulse,							//< 脉冲
	DMS_Turn_Over,						//< 翻转
	DMS_Long_Signal						//< 长信号
};

//< 手自动切换枚举
enum AM_Switch
{
	Yes_Switch,						//< 允许切换
	NO_Switch,						//< 不允许切换
};

/*模块可调参数结构体*/
typedef struct {
	bool Man_Value;				//< 手动输出值
	DMS_AM_Sta MA_Sta;				//< 手自动方式选择
	DMS_Work_Mode Mode;				//< 工作方式
	float Pulse_Width;			//< 脉冲宽度
}DManSta_Par_t;


/*模块运算中间参数结构体定义*/
typedef struct {
	int Init_Count;				//< 初始化标志
	int ManOut;
	float PW_Num;				//< 记录脉冲长度
	bool DMS_PulseFlag;			//< 用于实现一定宽度的脉冲信号的标志

}DManSta_Sta_t;


/*模块参数结构体定义*/
struct DManSta_T
{
	Model_Base_t Base;			//< 模块基本参数结构体
	DManSta_Par_t Par;			//< 模块可调参数结构体
	DManSta_Sta_t Sta;			//< 模块运算中间参数结构体
};

extern DManSta_T* DManSta_t;

/*函数*/
bool CALCU_SAMA(DManSta)(Model_Base_t* arg, float dt, bool* DI, bool* DO, float* AI, float* AO);		//< SAMA运算函数
int BC_PARA(DManSta)(Model_Base_t* arg, void** Data);													//< 广播SAMA参数变量函数（无参数需要广播的模块直接将BCPara函数设置为NULL即可）
int BAK_STA(DManSta)(Model_Base_t* arg, void** Data);													//< 备份SAMA运算中间参数
int ANA_STA(DManSta)(Model_Base_t* arg, void** Data);													//< 解析备份的SAMA运算中间参数
int CHANGE_PAR(DManSta)(Model_Base_t* arg, void** Data);												//< 在线修改模块参数函数
void INIT_STAPAR(DManSta)(Model_Base_t* arg);															//< 初始化模块运算中间参数
void CMD_DEAL(DManSta)(Model_Base_t* arg, void* Data, const char* CMD);								//< 与模块相关的命令字处理函数


#endif
